importPackage(Packages.java.io);
importPackage(Packages.de.elo.ix.client);
//@include lib_Class.js
//@include lib_sol.common.ix.ServiceBase.js
var logger = sol.create("sol.Logger", { scope: "sol.common.ix.services.ScriptVersionReportCreate" });
/**
* Generates a report of child entries for a given archive path.
*
* This report can be saved and used by `sol.common.ix.services.ScriptVersionReportValidate`
* later in order to check for changes in files.
*
* # As IX service call
*
* sol.common.IxUtils.execute('RF_sol_common_service_ScriptVersionReportCreate', {
* arcPath: "ARCPATH[1]:\\Administration\\Business Solutions"
* });
*
* # Returns data as followed
*
* The service creates a data structure that looks as follows.
*
* {
* date: "20150623105541",
* files: [{
* refPath: "¶Administration¶Business Solutions¶connector_xml¶resources",
* name: "doc_import_example",
* filehash: "9F0FF55B9F675DBD3CE42E9B3B337DA3",
* guid: "(B22ECD56-1537-3B3B-CBBA-5DAE2A66DA81)",
* version: "6",
* editor: "James Bond",
* date: "20150414141537",
* deleted: false
* }, {
* refPath: "¶Administration¶Business Solutions¶connector_xml¶resources",
* name: "standard_import_example",
* filehash: "6F35A6E25C927442CFD484EBBF6ECAE2",
* guid: "(04089DB6-E667-EDDE-DB86-5FCB6E5F4DFB)",
* version: "1",
* editor: "Batman Superman",
* date: "20150402162230",
* deleted: false
* }]
* }
*
* @author JHR, ELO Digital Office GmbH
* @version 1.0
*
* @eloix
* @requires sol.common.JsonUtils
* @requires sol.common.ix.RfUtils
* @requires sol.common.ix.ServiceBase
*
*/
sol.define("sol.common.ix.services.ScriptVersionReportCreate", {
extend: "sol.common.ix.ServiceBase",
/**
* @cfg {string} arcPath (required)
* Repository start path
*/
arcPath: undefined,
initialize: function (config) {
var me = this;
me.$super("sol.common.ix.ServiceBase", "initialize", [config]);
me.checkMandatoryProperties("arcPath");
},
/**
* Generates a Version Script List in JSON-Format into a document.
* @return {Object}
*/
process: function () {
var me = this,
sordsSubEntry = [],
arcPath = me.arcPath,
scriptVersionList = {},
timeDateJava = new Date(),
isoDate = me.isoFromDate(timeDateJava),
i,
fileentry,
ed,
dv;
sordsSubEntry = me.findFileInfo(arcPath, sordsSubEntry);
scriptVersionList.date = isoDate;
scriptVersionList.files = [];
for (i = 0; i < sordsSubEntry.length; i++) {
fileentry = {};
ed = ixConnect.ix().checkoutDoc(sordsSubEntry[i].id, -1, EditInfoC.mbDocument, LockC.NO);
dv = me.getWorkVersion(ed.document.docs);
if (!dv) {
continue;
}
fileentry.refPath = sordsSubEntry[i].refPaths[0].pathAsString;
fileentry.name = sordsSubEntry[i].name;
fileentry.guid = sordsSubEntry[i].guid;
fileentry.filehash = dv.md5;
fileentry.version = dv.version;
fileentry.editor = dv.ownerName;
fileentry.date = dv.updateDateIso;
fileentry.deleted = dv.deleted;
scriptVersionList.files.push(fileentry);
}
me.logger.debug(["JSON-object scriptVersionList = '{0}' is generated", scriptVersionList]);
return scriptVersionList;
},
/**
* List sub entries of a folder
*
* @param {String} arcPath archive path to start search
* @param {Object[]} sordsSubEntry (childelements) of current folder represented by de.elo.ix.client.Sord
* @return {Object[]} Subentries (childelements) of current folder represented by de.elo.ix.client.Sord
*/
findFileInfo: function (arcPath, sordsSubEntry) {
var me = this,
ed,
parentId,
fi,
sordZ,
fr,
frSords,
isFolder,
isDocument,
isReference,
i,
idx;
try {
ed = ixConnect.ix().checkoutSord(arcPath, EditInfoC.mbOnlyId, LockC.NO);
parentId = ed.sord.id;
fi = new FindInfo();
fi.findChildren = new FindChildren();
fi.findChildren.parentId = parentId;
fi.findChildren.endLevel = 1;
fi.findChildren.mainParent = true;
sordZ = SordC.mbAll;
idx = 0;
fr = ixConnect.ix().findFirstSords(fi, 1000, sordZ);
while (true) {
frSords = fr.sords;
for (i = 0; i < frSords.length; i++) {
isFolder = frSords[i].type < SordC.LBT_DOCUMENT;
isDocument = frSords[i].type >= SordC.LBT_DOCUMENT && frSords[i].type <= SordC.LBT_DOCUMENT_MAX;
isReference = frSords[i].parentId != parentId;
if (isFolder && !isReference) {
sordsSubEntry = me.findFileInfo(arcPath + "\\" + frSords[i].name, sordsSubEntry);
}
if (isDocument && !isReference) {
me.logger.debug("Arcpath=" + arcPath + "\\" + frSords[i].name);
sordsSubEntry.push(frSords[i]);
}
}
if (!fr.isMoreResults()) {
break;
}
idx += fr.sords.length;
fr = ixConnect.ix().findNextSords(fr.searchId, idx, 1000, sordZ);
frSords = fr.sords;
}
} catch (e) {
me.logger.debug(["function findChildren (arcPath: '{0}') catch (e) name: '{1}' message: '{2}'", arcPath, e.name, e.message]);
}
if (fr) {
ixConnect.ix().findClose(fr.searchId);
}
return sordsSubEntry;
},
isoFromDate: function (timeDateJava) {
var me = this,
isoDate = me.pad(timeDateJava.getFullYear(), 4) +
me.pad(timeDateJava.getMonth() + 1, 2) +
me.pad(timeDateJava.getDate(), 2) +
me.pad(timeDateJava.getHours(), 2) +
me.pad(timeDateJava.getMinutes(), 2) +
me.pad(timeDateJava.getSeconds(), 2);
return isoDate;
},
pad: function (val, len) {
val = String(val);
while (val.length < len) {
val = "0" + val;
}
return val;
},
getWorkVersion: function (docs) {
var dv, i;
dv = null;
for (i = 0; i < docs.length; i++) {
dv = docs[i];
if (dv.workVersion) {
return dv;
}
}
return dv;
}
});
/**
* @member sol.common.ix.services.ScriptVersionReportCreate
* @method RF_sol_common_service_ScriptVersionReportCreate
* @static
* @inheritdoc sol.common.ix.ServiceBase#RF_ServiceBaseName
*/
function RF_sol_common_service_ScriptVersionReportCreate(iXSEContext, args) {
logger.enter("RF_sol_common_service_ScriptVersionReportCreate", args);
var params, module, scriptVersionList;
params = sol.common.ix.RfUtils.parseAndCheckParams(iXSEContext, arguments.callee.name, args, "arcPath");
module = sol.create("sol.common.ix.services.ScriptVersionReportCreate", params);
scriptVersionList = module.process();
logger.exit("RF_sol_common_service_ScriptVersionReportCreate");
return sol.common.ix.RfUtils.stringify(scriptVersionList);
}